An application layer or transport layer protocol may implement a congestion avoidance algorithm or other flow control mechanism that is based on a network capacity and/or a network loading condition. The congestion avoidance algorithm may be implemented to prevent a link between a server device and a client device from becoming overloaded with network traffic. Additionally, the congestion avoidance algorithm may estimate congestion between the server device and the client device, and may adjust a transmit rate of network traffic based on the estimated congestion.